package com.zimi.common.mapper;

import com.zimi.common.model.ColumnInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 自定义通用数据库操作
 */
@Mapper
public interface CustomMapper {

    /**
     * 查询表及其注释
     *
     * @param dataName 数据库名
     * @return {name= comment}:Map
     */
    @Select({"SELECT TABLE_NAME AS name,TABLE_COMMENT AS comment",
            "from INFORMATION_SCHEMA.TABLES",
            "where TABLE_SCHEMA=#{dataName}"})
    List<ColumnInfo> getTables(@Param("dataName") String dataName);

    /**
     * 查询对应表格字段
     *
     * @param tableName 表名
     * @param dataName  数据库名
     * @return {name= comment}:Map
     */
    @Select({"select COLUMN_NAME AS name,COLUMN_COMMENT AS comment",
            "from INFORMATION_SCHEMA.Columns ",
            "where TABLE_NAME=#{tableName} AND TABLE_SCHEMA=#{dataName}"})
    List<ColumnInfo> getCols(@Param("tableName") String tableName, @Param("dataName") String dataName);

    /**
     * 查询指定索引数量
     *
     * @param tableName 表名
     * @param dataName  数据库名
     * @param index     索引名
     * @return count:int
     */
    @Select({"SELECT COUNT(*) FROM information_schema.statistics",
            "WHERE table_schema = #{dataName} AND table_name = #{tableName} AND index_name = #{index}"})
    int getIns(@Param("tableName") String tableName, @Param("dataName") String dataName, @Param("index") String index);

    /**
     * 添加指定索引
     *
     * @param tableName 表名
     * @param index     索引名
     * @param ins       索引列:"client_code,client_type"
     */
    @Select({"ALTER TABLE erp_customer_info ADD UNIQUE KEY ${index} (${ins})"})
    void addIns(@Param("tableName") String tableName, @Param("index") String index, @Param("ins") String ins);

    /**
     * 删除指定索引
     *
     * @param tableName 表名
     * @param index     索引名
     */
    @Select({"DROP INDEX ${index} ON ${tableName}"})
    void dropIns(@Param("tableName") String tableName, @Param("index") String index);

}
